# -*- coding: utf-8 -*-

"""剑指 Offer II 005. 单词长度的最大乘积
给定一个字符串数组 words，请计算当两个字符串 words[i] 和 words[j] 不包含相同字符时，它们长度的乘积的最大值。假设字符串中只包含英语的小写字母。如果没有不包含相同字符的一对字符串，返回 0。

示例 1:
输入: words = ["abcw","baz","foo","bar","fxyz","abcdef"]
输出: 16 
解释: 这两个单词为 "abcw", "fxyz"。它们不包含相同字符，且长度的乘积最大。

示例 2:
输入: words = ["a","ab","abc","d","cd","bcd","abcd"]
输出: 4 
解释: 这两个单词为 "ab", "cd"。

示例 3:
输入: words = ["a","aa","aaa","aaaa"]
输出: 0 
解释: 不存在这样的两个单词。

提示：
2 <= words.length <= 1000
1 <= words[i].length <= 1000
words[i] 仅包含小写字母"""

class Solution:
    def maxProduct(self, words) -> int:
        wordsets = [set(word) for word in words]
        
        ln = len(wordsets)
        max_multi_len = 0
        
        for i in range(0, ln):
            prewordset = wordsets[i]
            for j in range(i+1, ln):
                nxtwordset = wordsets[j]
                if not(prewordset & nxtwordset):
                    multi_len = len(words[i])*len(words[j])
                    max_multi_len = max(max_multi_len, multi_len)
        
        return max_multi_len

if __name__ == '__main__':
    so = Solution()
    print(so.maxProduct(["abcw","baz","foo","bar","fxyz","abcdef"]))
    print(so.maxProduct(["a","ab","abc","d","cd","bcd","abcd"]))
    print(so.maxProduct(["a","aa","aaa","aaaa"]))
